#include "TestBytes.h"

TestBytes::TestBytes() {

}

TestBytes::~TestBytes() {

}

void TestBytes::testConstructores() {

	/* Constructor por parametro */
	Bytes byte1("hola");
	Bytes byte2;
	byte2.setBytes("hola");
	Bytes byte3(byte1);

	assert(byte1.toString() == byte2.toString(),"Testeando constructor por parametro");
	assert(byte2.toString() == byte3.toString(),"Testeando constructor copia");

}

void TestBytes::testAgregarBytes() {

	Bytes byteFinal("Hola");
	byteFinal.agregarAlFinal(",Mundo!");

	assert(byteFinal.toString() == "Hola,Mundo!","Testeando agregar al Final");

	Bytes byteAgregarMedio("HoMundo!");

	assert(byteAgregarMedio.getTamanio() == 8,"Testeando Tamanio");
	byteAgregarMedio.agregar("la,",2);

	assert(byteAgregarMedio.toString() == "Hola,Mundo!","Testeando agregar con offset");

	bool fueraDeRango = byteAgregarMedio.agregar("Esto No Se Tiene que Agregar",16);

	fail(fueraDeRango,"Testeando Intento de agregar en offset no valido");

	assert(byteAgregarMedio.toString() == "Hola,Mundo!","Testeando que no se modifico el objeto");


}

void TestBytes::testRemover() {

	Bytes byteVaciar("Hola");
	byteVaciar.vaciar();

	assert(byteVaciar.toString() == "", "Testeando vaciar");

	Bytes byteRemover("Hola");
	byteRemover.remover(0,2);

	assert(byteRemover.toString() == "a","Testeando Remover por offsets");

	Bytes byteRemover2("Hola");
	byteRemover2.remover(1,2);

	assert(byteRemover2.toString() == "Ha","Testeando Remover por offsets 2");

	Bytes byteRemover3("Hola");
	byteRemover3.remover(0,0);

	assert(byteRemover3.toString() == "ola","Testeando Remover por offsets 3");

	bool fueraDeRango = byteRemover3.remover(0,5);

	fail(fueraDeRango,"Testeando Fuera de Rango");
}

void TestBytes::testRecuperarDatos(){
	Bytes b;
	int dato = 4;
	b.agregarAlFinal(&dato,sizeof(int));
	int recuperado=0;
	b.leer(&recuperado,0,sizeof(int));
	assert(dato==recuperado,"Debe recuperar lo mismo que metio.");

}

void TestBytes::run() {
	this->testConstructores();
	this->testAgregarBytes();
	this->testRemover();
	this->testRecuperarDatos();
}
void TestBytes::setup() { }
